编译x86版本linux kerne 1 2 3 4 5 6 7 8 9 make menuconfig make -j$(nproc)
编译arm版本linux kernel 1 2 3 4 5 6 7 8 9 10 11 12 13 sudo apt install gcc-arm-linux-gnueabihf sudo apt install g++-arm-linux-gnueabihf sudo apt remove g++-arm-linux-gnueabihf make ARCH=arm defconfig make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- menuconfig make -j$(nproc) ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf-
编译risc-v版本linux kernel 1 2 3 4 5 6 7 8 9 10 11 12 13 14 sudo apt install autoconf automake autotools-dev curl python3 libmpc-dev libmpfr-dev libgmp-dev gawk build-essential bison flex texinfo gperf libtool patchutils bc zlib1g-dev libexpat-dev git clone --recursive https://github.com/riscv/riscv-tools.git make ARCH=riscv defconfig make ARCH=riscv CROSS_COMPILE=riscv64-linux-gnu- menuconfig make -j$(nproc) ARCH=riscv CROSS_COMPILE=riscv64-linux-gnu-
risc-v版本qemu调试需要另外添加固件,opensbi编译 1 2 3 4 5 6 7 git clone https://github.com/riscv-software-src/opensbi.git cd opensbi/make -j$(nproc) CROSS_COMPILE=riscv64-linux-gnu- PLATFORM=generic
编译busybox命令集合和制作根文件系统 编译busybox命令集合 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 git clone https://github.com/mirror/busybox.git make allyesconfig ARCH=x86_64 make allyesconfig ARCH=arm make allyesconfig ARCH=riscv make menuconfig make -j$(nproc) ARCH=x86_64 make -j$(nproc) ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- make -j$(nproc) ARCH=riscv CROSS_COMPILE=riscv64-linux-gnu- make install make install ARCH=arm CROSS_COMPILE=riscv64-linux-gnu- make install ARCH=riscv CROSS_COMPILE=riscv64-linux-gnu-
编译完成后构建根文件系统 1 2 3 4 cd _installmkdir proc sys dev etc etc/init.d touch etc/init.d/rcS vim etc/init.d/rcS
rcS文件内容:1 2 3 4 mount -t proc none /proc mount -t sysfs none /sys /sbin/mdev -s
执行:1 2 3 4 5 6 sudo mknod dev/console c 5 1 sudo mknod dev/ram b 1 0 chmod a+x etc/init.d/rcS find -print0 | cpio -0oH newc | gzip -9 > ../x86_64-rootfs.img
qemu-gdb运行脚本:1 2 3 4 5 6 7 8 qemu-system-x86_64 \ -kernel ./x86_64-bzImage \ -initrd ./x86_64-rootfs.img \ -m 4G \ -nographic \ -append "root=/dev/ram rdinit=/sbin/init earlyprintk=serial,ttyS0 console=ttyS0 nokaslr" \ -S \ -s
下断点在./init/main.c中的start_kernel函数
调试linux kernel时候显示代码红线解决方案 1 2 python ./linux-6.6.8/scripts/clang-tools/gen_compile_commands.py
vscode中launch.json文件内容 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 { // Use IntelliSense to learn about possible attributes. // Hover to view descriptions of existing attributes. // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387 "version" : "0.2.0" , "configurations" : [], "name" : "qemu-kernel-gdb" , "type" : "cppdbg" , "request" : "launch" , "miDebuggerServerAddress" : "localhost:1234" , "program" : "${workspaceFolder} /vmlinux" , "args" : [], "stopAtEntry" : false , "cwd" : "${workspaceFolder} " , "environment" : [], "externalConsole" : false , "logging" : { "engineLogging" : false }, "MIMode" : "gdb" }